perm filename USERS.SAI[PUB,TES] blob sn#151279 filedate 1975-03-14 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00014 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	BEGOF("USERS")
C00004 00003	PUBLIC SIMPLE PROCEDURE USERS! $"#
C00006 00004	IFSITE NOT TENEX THENK
C00010 00005	PUBLIC SIMPLE PROCEDURE DBURP $"#
C00012 00006	PUBLIC SIMPLE PROCEDURE DPUB!DEBUG $"#
C00013 00007	IFSITE TENEX THENK
C00014 00008	IFSITE NOT TENEX THENK
C00016 00009	IFSITE CMUVER THENK
C00017 00010	IFSITE NOT TENEX THENK
C00018 00011	IFSITE TENEX THENK
C00019 00012	PRIVATE SIMPLE STRING PROCEDURE SUBST(STRING STR, OLDS, NEWFIRST, NEWREST) $"#
C00020 00013	IFSITE TENEX THENK
C00025 00014	FINISHED
C00026 ENDMK
C⊗;
BEGOF("USERS")

COMMENT

         *** Variations at Different Sites are Extensive ***

User interactions at startup and DEBUG times.

;

IFC TENEX THENC

DEFINE SUBCMDS= [11]; COMMENT NOT COUNTING ? AND CR ;
DEFINE DCASE= [1], XCASE= [2], TCASE= [3], MCASE= [4],
	PCASE= [5], SCASE= [6],
	YCASE= [7], NCASE= [8], ACASE= [9],
	BCASE= [10], HCASE= [11],
	QUESTCASE= [12], CRCASE= [13]; COMMENT ALWAYS LAST TWO ;
PRELOAD!WITH "ERROR", "DOCUMENT: ", "XGP", "TTY",
	IFCR PARCVER THENC PARCMNEMONIC ELSEC "MIC" ENDC,
	"PRINT DEBUG INFO", "SPREAD=",
	"YES", "NO", "ASK", "BIG", "HUGE" ;
OWN STRING ARRAY COMPLETION[0:SUBCMDS] ;
PRELOAD!WITH "ERROR", "(OUTPUT FILE NAME)", "PRINT DEVICE",
	"PRINT DEVICE (DEFAULT)", "PRINT DEVICE",
	"(LINE NUMBERS AND ERRORS) IN MARGIN OF DOCUMENT",
	"1 TO 9 (DEFAULT IS 1=SINGLE SPACE)",
	"DO DELETE INTERMEDIATE FILES (DEFAULT)",
	"DONT DELETE INTERMEDIATE FILES",
	"TO DELETE INTERMEDIATE FILES",
	"SYMBOL TABLE", "SYMBOL TABLE" ;
OWN STRING ARRAY EXPLANATION[0:SUBCMDS] ;

ENDC

PROCEDURES

IFCR CMUVER THENC
REQUIRE "PUBTMP.SAI" SOURCE!FILE ;
COMMENT RUNPROG, READTMPCOR, ETC. ;
ENDC
PUBLIC SIMPLE PROCEDURE USERS! ;$"#
BEGIN "USERS!"

IFC TENEX THENC
JOBNO ← CVS(GJINF(J, I, J)) ;
CONDIR ← DIRST(I) ;
ENDC TES 10/25/73 ;
IFC CMUVER THENC
  JOBNO ← ("0" & CVS(CALL(0,"PJOB")))[∞-1 FOR 2];
  PUIEXT ← "." & JOBNO & "I" ;
  PUGEXT ← "." & JOBNO & "G" ;
  PUZEXT ← "." & JOBNO & "Z" ;
ENDC	RKJ: 6-FEB-75 ;

DOPASS3←FALSE;	RKJ:  1-4-74;
ERRLF←FALSE; RKJ 6/25/74 ;
DEBUGFLAG ← -1 ; TES 8/21/74 ;

IFC CMUVER THENC
	LIBPPN ← "[A700PU00]";
ENDC		COMMENT RKJ 10-10-73;

IFC SAILVER THENC
	LIBPPN ← IF EQU(CVXSTR(CALL(0,"DSKPPN"))[4 TO 6], "TES") THEN NULL ELSE "[1,3]"  ;
ENDC

IFC ITSVER THENC PJ 5/27/74;
	LIBPPN ← " COMMON;" ; PJ 5/28/74 THE SPACE IS SIGNIFICNAT ;
ENDC

IFC TENEX THENC LIBPPN ← IF EQU(CONDIR,"PUB") THEN "<PUB>" ELSE "<SUBSYS>" ; ENDC

JOBNAM ← IFC SAILVER THENC CV6STR(CALL(0,"GETNAM")) ELSEC "PUB" ENDC;
BH 3/14/75 THIS IS USED TO CHANGE THE NAME OF PUBSTD.DFS AND PUB2.DMP IN SORCE
	AND RUNP2 RESPECTIVELY.  OTHER SITES SHOULD SET IT RIGHT FOR THEM AND
	ADD THE APPROPRIATE CODE IN SORCE AND RUNP2;

END "USERS!" ;
IFSITE NOT TENEX THENK

PUBLIC SITE(NOT TENEX) SIMPLE PROCEDURE ANYSTART(STRING COMDLINE) ;$"#
BEGIN "ANYSTART"
STRING OPTIONS, N, M ;
INTEGER EXT, PPN ;
IFC ITSVER PJ 5/28/74 ;
    THENC SETBREAK(1, "←/()", CR&LF&FF, "INS")
    ELSEC SETBREAK(1, "←/()", CR&LF&TB&FF&SP, "INS") ENDC ;
SETBREAK(4, ":", NULL, "IS") ;		RKJ: 5-17-74 ;
SETBREAK(2, DIGS, SP, "XNS") ;
SETBREAK(3, ".[", NULL, "INR") ;
OUTFILE ← SCAN(COMDLINE, 1, BRC) ;
IF BRC NEQ "←" THEN BEGIN INFILE ← OUTFILE ; OUTFILE ← NULL END
ELSE INFILE ← SCAN(COMDLINE, 1, BRC) ; TES 8/14/74 SIMPLIFIED;
RKJ: 26-Sep-74 - CCL linkages;
IFC CMUVER THENC
IF INFILE[∞ FOR 1]="!" THEN
    BEGIN
	RUNPROG(INFILE[1 TO ∞-1],1);  RKJ: fixed 7-Nov-74;
	START!CODE CALLI 0,'12 END;
    END;
ENDC
INCHAN ← OPENTOREAD(NULL, "Manuscript ", INFILE, PUBEXT, NULL) ;
IFILENAME ← CVXSTR(CVFIL(INFILE, EXT, INPPN)) ;
FULLFILE ← INFILE ; TES TEMPORARY 10/15/74 ;
IF NULSTR(OUTFILE) THEN
	BEGIN
	OUTFILE ← IFILENAME ;
	GENREXT ← TRUE ;
	END
ELSE	BEGIN
	CVFIL(OUTFILE, EXT, PPN) ;
	GENREXT ← EXT=0 ;
	END ;
TMPFILE ← IFILENAME & RPGEXT ;
WHILE BRC="/" DO OPTIONS ← OPTIONS & SCAN(COMDLINE,1,BRC) ;
IF BRC = "(" THEN DO OPTIONS ← OPTIONS & SCAN(COMDLINE,1,BRC) & (IF BRC="/" THEN BRC ELSE NULL)
	UNTIL BRC = 0 OR BRC = ")";
IF FULSTR(OPTIONS) THEN
DO	BEGIN
	N ← SCAN(OPTIONS, 2, BRC) ;
	IF "a" LEQ BRC LEQ "z" THEN BRC←BRC-'40;  RKJ: 5-10-74 ;
	RKJ: 5-10-74 got rid of all lower case below ;
	IF BRC = "D" THEN DEBUG ← -1
	ELSE IF BRC = "S" THEN PREFMODE ← IF NULSTR(N) THEN 1 ELSE CVD(N)
	ELSE IF BRC = "M" THEN DEVICE ← -MIC
	ELSE IF BRC = "T" THEN DEVICE ← -TTY
	ELSE IF BRC = "L" THEN DEVICE ← -LPT
	ELSE IF BRC = "X" THEN DEVICE ← -XGP   RKJ;
	ELSE IF BRC="N" OR BRC="Y" OR BRC="A" THEN DELINT ← BRC
	ELSE IF BRC = "B" THEN SYMNO ← BIG!SIZE - 1
	ELSE IF BRC = "H" THEN SYMNO ← HUGE!SIZE - 1
	ELSE IF BRC = "P" AND OPTIONS = "U" THEN
		OPTIONS ← OPTIONS[3 TO ∞]  COMMENT /PUB ;
	ELSE IF BRC NEQ 0 THEN EARLYWARNING("Never heard of a " & BRC & " option") ;
	END
UNTIL BRC = 0 ;
FOR DUMMY←1 THRU 4 DO BREAKSET(DUMMY, NULL, "O") ;	RKJ: 5-17-74 ;
END "ANYSTART" ;

ENDC
PUBLIC SIMPLE PROCEDURE DBURP ;$"#
BEGIN TES 8/19/74 DEBUG PRINTOUTS ;
BOOLEAN VERBOSE ; INTEGER I ;
IF ON AND NOT SWDBACK THEN BEGIN OUTSTR(CRLF); SWDBACK←TRUE END ;
PASS ;
IF ITS(INPUT) THEN
	BEGIN
	PASS ;
	VERBOSE ← IF ITS(VERBOSE) THEN IPASS(TRUE) ELSE FALSE ;
	IF ON THEN BURPINPUT(VERBOSE) ;
	END
ELSE IF ITS(AREAS) THEN
	BEGIN
	PASS ;
	VERBOSE ← IF ITS(VERBOSE) THEN IPASS(TRUE) ELSE FALSE ;
	IF ON THEN BURPAREAS(VERBOSE) ;
	IF STATUS>-1 AND	COMMENT EVEN IF NOT ON, CHECK ;
		(WHATIS(THISAREA) NEQ AREAIDA OR WHATIS(AA) NEQ AAA OR
		 (I←DEFA) AND I NEQ AREAIXM)
			THEN WARN(NULL,"ARRAYS AND IDAS DISAGREE: PUB BUG!" & CRLF) ;
	END
ELSE WARN(NULL, "Unrecognized BURP command " & THISWD) ;
END "DBURP" ;
PUBLIC SIMPLE PROCEDURE DPUB!DEBUG ;$"#
IF NOT ON THEN PASS ELSE
BEGIN "BUGLOOP"
BOOLEAN T; RKJ: 6-FEB-75 SAVE AUTOCRLF;
STRING INPT ;
T←AUTOCRLF ; AUTOCRLF←TRUE ;
IF FULSTR(INPT←TYPEIN) THEN
	BEGIN
	SWICH("TTY←" & SUBST(SUBST(INPT,TB,SP,SP),
		CRLF&"##", ";"&CRLF&TB, CRLF&TB) &  TES 8/23&25/74;
		(CRLF & TB & TB & "PUB!DEBUG" & CRLF & TB & TB),
		-1, 0) ;
	PASS ;
	END
ELSE PASS ;
AUTOCRLF←T ;
END "BUGLOOP" ;
IFSITE TENEX THENK

PRIVATE SITE(TENEX) SIMPLE INTEGER PROCEDURE ININTEGER(INTEGER NUMBER) ;$"#
	BEGIN
	INTEGER N, I ;
	I ← -1 ;
	DO	BEGIN
		N ← INCHRW ;
		IF N="?" THEN
			BEGIN
			OUTSTR(EXPLANATION[NUMBER]) ;
			N ← IF I<0 THEN INCHRW ELSE RUBOUT ;
			END ;
		IF N=ALTMODE OR N=EOL OR N=SP THEN
			BEGIN
			IF I<0 THEN OUTSTR(CVS(I←1)) ;
			IF N NEQ EOL THEN OUTSTR(CRLF) ;
			RETURN(I) ;
			END ;
		IF "1" LEQ N AND N LEQ "9" THEN
			I ← IF I<0 THEN N-"0" ELSE 10*I+(N-"0")
		ELSE BEGIN OUTSTR("XXX"&CRLF) ; RETURN(-1) END ;
		END
	UNTIL FALSE ;
	END "ININTEGER" ;

ENDC
IFSITE NOT TENEX THENK

PUBLIC SITE(NOT TENEX) SIMPLE PROCEDURE RPGSTART ;$"#

IFC CMUVER THENC

BEGIN "RPGSTART"
STRING CMD,OTHER!CMDS; LABEL NORPG;
IF NOT RTMPFILE("PUB",OTHER!CMDS,TRUE,TRUE) THEN
    NORPG: BEGIN RPGSW←FALSE; SSTART; RETURN END;
SETBREAK(1,LF,CR,"IS");
DO CMD←SCAN(OTHER!CMDS,1,DUMMY) UNTIL (FULSTR(CMD) OR NULSTR(OTHER!CMDS));
IF NULSTR(CMD) THEN GO NORPG;
IF FULSTR(OTHER!CMDS) THEN WTMPFILE("PUB",OTHER!CMDS,TRUE);
OTHER!CMDS←NULL;
ANYSTART(CMD);
OUTSTR("PUB: ");
CMD←NULL;
END "RPGSTART" ;

ELSEC

BEGIN "RPGSTART"
STRING CMD ;
EOF ← 0 ; OPEN(0, "DSK", 0, 1, 0, 50, BRC, EOF) ;
LOOKUP(0, "QQPUB"&RPGEXT, FLAG) ; TES 8/14/74 SIMPLIFIED ;
IF FLAG THEN EARLYWARNING("RPG PROBLEM: QQPUB.RPG NONEXISTENT") ;
SETBREAK(1, LF, CR, "INS") ;
CMD ← INPUT(0,1) ;
ANYSTART(CMD) ; RELEASE(0) ;
END "RPGSTART" ;

ENDC

ENDC
IFSITE CMUVER THENK

PUBLIC SITE(CMUVER) SIMPLE PROCEDURE RUNLIBPROG(STRING FILENAME) ;$"#
	RUNPROG(LIBDEV & ":" & FILENAME & LIBPPN, 1) ;

ENDC
IFSITE NOT TENEX THENK

PUBLIC SITE(NOT TENEX) SIMPLE PROCEDURE SSTART ;$"#
BEGIN "SSTART"
STRING S ;
DO BEGIN OUTCHR("*"); S←INCHWL; END UNTIL FULSTR(S);
ANYSTART(S);
END "SSTART";

ENDC
IFSITE TENEX THENK

PRIVATE SITE(TENEX) SIMPLE BOOLEAN PROCEDURE SUBCOMMAND(INTEGER NUMBER) ;$"#
	BEGIN
	INTEGER N ;
	OUTSTR(COMPLETION[NUMBER][2 TO ∞]) ;
	N ← INCHRW ;
	IF N="?" OR N=ALTMODE THEN
		BEGIN
		OUTSTR(SP & EXPLANATION[NUMBER]) ;
		N ← INCHRW ;
		END ;
	IF N=CR OR N=EOL THEN RETURN(TRUE) ;
	IF N=ALTMODE OR N=SP THEN
		BEGIN OUTSTR(CRLF) ; RETURN(TRUE) ; END ;
	OUTSTR("XXX"&CRLF) ; RETURN(FALSE) ;
	END "SUBCOMMAND" ;

ENDC
PRIVATE SIMPLE STRING PROCEDURE SUBST(STRING STR, OLDS, NEWFIRST, NEWREST) ;$"#
BEGIN TES 8/23/74 FOR PUB!DEBUG AT LEAST ;
INTEGER WHICH ; TES 8/23/74 ;
STRING S ;
S ← NULL ; WHICH ← 0 ;
WHILE FULSTR(STR) DO
	IF EQU(STR[1 TO LENGTH(OLDS)], OLDS) THEN
		BEGIN
		S ← S & (IF (WHICH←WHICH+1)=1 THEN NEWFIRST ELSE NEWREST) ;
		STR ← STR[LENGTH(OLDS)+1 TO ∞] ;
		END
	ELSE S ← S & LOP(STR) ;
RETURN(S)  ;
END "SUBST" ;
IFSITE TENEX THENK

PUBLIC SITE(TENEX) SIMPLE PROCEDURE TENEXSTART ;$"#
BEGIN
INTEGER THECHR ; TES 10/22/74 PREFER <CR> AFTER <COMMA> ;
INTEGER N ; BOOLEAN DUN ;
PRELOAD!WITH
[13]0,	CRCASE,	[17]0,	CRCASE,
[31]0,	QUESTCASE,
0,	ACASE,	BCASE,	0,	DCASE,	0,	0,	0,
HCASE,	0,	0,	0,	0,	MCASE,	NCASE,	0,
PCASE,	0,	0,	SCASE,	TCASE,	0,	0,	0,
XCASE,	YCASE,	0,	[5]0,
0,	ACASE,	BCASE,	0,	DCASE,	0,	0,	0,
HCASE,	0,	0,	0,	0,	MCASE,	NCASE,	0,
PCASE,	0,	0,	SCASE,	TCASE,	0,	0,	0,
XCASE,	YCASE,	0,	[5]0	;
OWN INTEGER ARRAY CNVCASE[0:127] ;
IFCR PARCVER THENC PARCASE ; ENDC
OUTFILE ← NULL ;
DO	BEGIN "GTINCHAN" TES 6/11/74 ;
	OUTSTR("MANUSCRIPT: ") ;
	WHILE -1 = (INCHAN ←
		GTJFNL(NULL, '162000000000, '100000101,
			NULL, NULL, NULL, "PUB", NULL, NULL, NULL)) DO
		OUTSTR("  ?" & CRLF & "MANUSCRIPT: ") ;
	OPENF(INCHAN, 2) ;
	IF !SKIP! THEN
		BEGIN
		OUTSTR("CAN'T OPEN MANUSCRIPT; IS PROTECTION OK?"&CRLF) ;
		RLJFN(INCHAN) ;
		END
	ELSE DONE ;
	END "GTINCHAN"
UNTIL FALSE ;
INFILE ← JFNS(INCHAN, 0) ;
FULLFILE ← JFNS(INCHAN, '211110040001) ; TES 10/15/74 ;
INPPN ← JFNS(INCHAN, '10000000001) ;
IFILENAME ← JFNS(INCHAN, '1000000000) ;
EOF ← 0 ; SETINPUT(INCHAN, 150, BRC, EOF) ;
DUN ← FALSE ; 
BKJFN('100) ; COMMENT WAS THE CONFIRM WITH A COMMA? ;
IF CHARIN('100) = "," THEN
BEGIN "SUBCOMMANDS"
IF (THECHR←INCHRW)=EOL THEN THECHR←0 ELSE OUTSTR(CRLF) ;
DO	BEGIN
	OUTSTR("@@") ;
	CASE CNVCASE[IF THECHR THEN THECHR ELSE INCHRW] OF
		BEGIN
		[0] OUTSTR("?"&CRLF) ;
		[DCASE] BEGIN
			OUTSTR(COMPLETION[DCASE][2 TO ∞]) ;
			N ← GTJFNL(NULL, '462000000000,
			'100000101, NULL, NULL, IFILENAME,
			"DOC", NULL, NULL, NULL) ;
			IF N=-1 THEN OUTSTR("XXX"&CRLF)
			ELSE	BEGIN
				OUTFILE ← JFNS(N, 0) ;
				RLJFN(N) ; OUTSTR(CRLF) ;
				GENREXT ← FALSE ;
				END ;
			END ;
		[XCASE] IF SUBCOMMAND(XCASE) THEN DEVICE←-XGP ;
		[TCASE] IF SUBCOMMAND(TCASE) THEN DEVICE←-TTY ;
		[MCASE] IF SUBCOMMAND(MCASE) THEN DEVICE←-MIC ;
		[PCASE] IF SUBCOMMAND(PCASE) THEN DEBUG←-1 ;
		[SCASE] BEGIN
			OUTSTR(COMPLETION[SCASE][2 TO ∞]) ;
			IF (N←ININTEGER(SCASE))>0 THEN PREFMODE←N ;
			END ;
		[YCASE] IF SUBCOMMAND(YCASE) THEN DELINT←"Y" ;
		[NCASE] IF SUBCOMMAND(NCASE) THEN DELINT←"N" ;
		[ACASE] IF SUBCOMMAND(ACASE) THEN DELINT←"A" ;
		[BCASE] IF SUBCOMMAND(BCASE) THEN SYMNO←BIG!SIZE-1 ;
		[HCASE] IF SUBCOMMAND(HCASE) THEN SYMNO←HUGE!SIZE-1 ;
		[QUESTCASE]
			BEGIN
			OUTSTR("PUB SUBCOMMANDS ARE:"&CRLF) ;
			FOR N ← 1 THRU SUBCMDS DO
				OUTSTR("  "&COMPLETION[N] & SP &
				   EXPLANATION[N] & CRLF) ;
			OUTSTR("CR AFTER EACH, CR AT END"&CRLF) ;
			END ;
		[CRCASE] DUN ← TRUE
		END ;
	THECHR ← 0 ;
	END
UNTIL DUN ;
END "SUBCOMMANDS" ;
XCRIBL ← DEVICE = -XGP ;
IF NULSTR(OUTFILE) THEN
	BEGIN TES 10/22/74 ;
	OUTFILE ← IFILENAME ;
	GENREXT ← TRUE ;
	END ;
END "TENEXSTART" ;

ENDC
FINISHED

ENDOF("USERS")